package com.platform.utils;



import com.jcraft.jsch.*;
import com.platform.bean.JsonResult;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 已弃用
 */
@Component
public class UploadFileToRemoteUtils {

    /**
     * 上传文件
     *
     * @param file 文件
     * @param remoteDir 服务器路径
     * @return 文件url
     */
    public static JsonResult uploadFileToRemoteServer(MultipartFile file, String remoteDir) {
        String remoteHost = "117.72.40.8";
        int remotePort = 22; // 注意：SSH通常使用22端口，这里假设你使用的是非标准端口
        String remoteUser = "zuoshenge";
        String remotePassword = "2002916Cjr,";
//        String remoteDir = "/opt/docker/apache/www/images"; // 远程服务器上的目标目录
        String remoteFileName = file.getOriginalFilename(); // 远程服务器上的文件名

        JSch jsch = new JSch();
        Session session = null;
        ChannelSftp channel = null;

        try {
            session = jsch.getSession(remoteUser, remoteHost, remotePort);
            session.setPassword(remotePassword);

            // 禁用主机密钥检查（在生产环境中不推荐）
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);

            session.connect();

            channel = (ChannelSftp) session.openChannel("sftp");
            channel.connect();

            // 将文件上传到远程服务器
            InputStream inputStream = file.getInputStream();
            channel.put(inputStream, remoteDir + "/" + remoteFileName);
            inputStream.close();

            // 获取文件访问URL（这里需要根据实际情况生成）
            String url = "http://117.72.40.8/images/lost_and_found/" + remoteFileName;

            System.out.println("图片上传，访问URL：" + url);
            return JsonResult.builder().data(url).message("上传成功！").code("200").build();
        } catch (JSchException | SftpException e) {
            e.printStackTrace();
            return JsonResult.builder().data(null).message("SSH异常！").code("500").build();
        } catch (IOException e) {
            e.printStackTrace();
            return JsonResult.builder().data(null).message("IO异常！").code("500").build();
        } finally {
            if (channel != null) {
                channel.disconnect();
            }
            if (session != null) {
                session.disconnect();
            }
        }
    }

    /**
     * 根据文件url删除指定文件
     *
     * @param fileUrl 文件url
     * @return 结果
     */
    public static JsonResult deleteFileFromRemoteServer(String fileUrl, String remoteBaseDir) {
        String remoteHost = "117.72.40.8";
        int remotePort = 22;
        String remoteUser = "zuoshenge";
        String remotePassword = "2002916Cjr,";

        JSch jsch = new JSch();
        Session session = null;
        ChannelSftp channel = null;

        try {
            // 从URL中提取文件名
            String fileName = fileUrl.substring(fileUrl.lastIndexOf('/') + 1);

            session = jsch.getSession(remoteUser, remoteHost, remotePort);
            session.setPassword(remotePassword);

            // 配置SSH连接属性，禁用主机密钥检查（生产环境需谨慎）
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);

            // 连接远程服务器
            session.connect();

            // 打开SFTP通道
            channel = (ChannelSftp) session.openChannel("sftp");
            channel.connect();

            // 构造远程文件路径
            String remoteFilePath = remoteBaseDir + "/" + fileName;

            // 删除文件
            channel.rm(remoteFilePath);
            System.out.println("文件删除成功：" + remoteFilePath);

            return JsonResult.builder().data(null).message("删除成功！").code("200").build();
        } catch (SftpException e) {
            if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) {
                System.err.println("文件不存在：" + fileUrl);
                return JsonResult.builder().data(null).message("文件不存在！").code("404").build();
            }
            e.printStackTrace();
            return JsonResult.builder().data(null).message("SFTP异常！").code("500").build();
        } catch (Exception e) {
            e.printStackTrace();
            return JsonResult.builder().data(null).message("连接异常！").code("500").build();
        } finally {
            if (channel != null) {
                channel.disconnect();
            }
            if (session != null) {
                session.disconnect();
            }
        }
    }
}
